package ae.pcfc.etks.online.fnp.service;

import java.net.ConnectException;
import java.util.Date;
import java.util.List;

import ae.pcfc.etks.online.fnp.exception.FNPException;
import ae.pcfc.etks.online.fnp.service.types.CancelPaymentAdviceResponse;
import ae.pcfc.etks.online.fnp.service.types.ClientType;
import ae.pcfc.etks.online.fnp.service.types.GeneratePaymentAdviceResponse;
import ae.pcfc.etks.online.fnp.service.types.GetServiceCatalogueResponse.Service;
import ae.pcfc.etks.online.fnp.service.types.GetServiceParametersResponse;
import ae.pcfc.etks.online.fnp.service.types.ServiceParameterType;
import ae.pcfc.etks.online.fnp.service.types.ServicePaymentRequestType;
import ae.pcfc.etks.online.fnp.service.vo.ExtraParametersVO;

public interface FNPService {

	public Double previewPaymentAdvice(ClientType clientType, Date dateTime,
			String remarks, List<ServicePaymentRequestType> services,
			String sourceID) throws FNPException, ConnectException;

	public GeneratePaymentAdviceResponse generatePaymentAdvice(
			ClientType clientType, Date dateTime, String remarks,
			String transRemarks, ExtraParametersVO extraParamVo,
			List<ServicePaymentRequestType> services, String sourceID)
			throws FNPException, ConnectException;

	public CancelPaymentAdviceResponse cancelPaymentAdvice(
			String transactionNumber, String paymentAdviceNumber,
			String userName, String message, String sourceID) throws FNPException,
			ConnectException;

	public List<Service> getServiceCatalogue(String sourceID, String category)
			throws FNPException, ConnectException;

	public List<ServiceParameterType> getServiceParameters(
			List<String> serviceIds, String sourceID) throws FNPException,
			ConnectException;

	public String queryPaymentAdviceStatus(String paymentAdviceNumber,
			String sourceID) throws FNPException, ConnectException;

	List<GetServiceParametersResponse.Service> getServiceInfoAndParameters(
			List<String> serviceIds, String sourceID) throws FNPException,
			ConnectException;

	public Byte[] getClientPrepaidAccountReport(Date startDate, Date endDate,String trakheesID,
			String sourceID, String exportOption) throws FNPException, ConnectException;
	
	public Byte[] paymentAdviceStatusReport (Date startDate, Date endDate,String status, 
			String trakheesID, String sourceID, String exportOption) throws FNPException, ConnectException;
}
